package com.rockwell.sniffyhunter.utils;

import com.rockwell.sniffyhunter.model.MoveToNextZoneObject;
import com.rockwell.sniffyhunter.model.UnloadMazeLocator;

public enum MoveToNextZoneState implements IStateMachine {
	START {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			System.out.println("MoveToNextZoneState> Perform Start actions");
			return ((MoveToNextZoneObject)stateObject).start();
		}
	},
	/*
	ROTATE_TO_DESTINATION {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			System.out.println("MoveToNextZoneState> Perform Rotate To Destination actions");
			return ((MoveToNextZoneObject)stateObject).RotateToDestination();
		}
	},
	MOVE_BY_OFFSET {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			System.out.println("MoveToNextZoneState> Perform First State actions");
			return ((MoveToNextZoneObject)stateObject).MoveByOffset();
		}
	},
	FINAL_ROTATE {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			System.out.println("MoveToNextZoneState> Perform Final Rotate actions");
			return ((MoveToNextZoneObject)stateObject).FinalRotate();
		}
	},
	*/
	START_JOG {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).startJog();
		}
	},
	SCAN {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).scan();
		}
	},
	NAV_AWAY_FROM_OBS {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).navAwayFromObs();
		}
	},
	REVERSE_DUE_TO_PLAY_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).reverseDueToPlayWall();
		}
	},
	TURN_DUE_TO_PLAY_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).turnDueToPlayWall();
		}
	},
	SCAN_AFTER_TURN_DUE_TO_PLAY_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).scanAfterTurnDueToPlayWall();
		}
	},
	MOVE_TO_NEXT_SCAN_ROW {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).moveToNextScanRow();
		}
	},
	SCAN_AFTER_MOVE_TO_NEXT_SCAN_ROW {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).scanAfterMoveToNextScanRow();
		}
	},
	TURN_AFTER_MOVE_TO_NEXT_SCAN_ROW {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).turnAfterMoveToNextScanRow();
		}
	},
	TURN_DUE_TO_CORNER_PLAY_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).turnDueToCornerPlayWall();
		}
	},
	REVERSE_DUE_TO_CORNER_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).reverseDueToCornerWall();
		}
	},
	TURN_DUE_TO_CORNER_PLAY_WALL_DETECTED_BY_FRONT_SIDE_SENSORS {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).turnDueToCornerPlayWallDetectedByFrontAndSideSensors();
		}
	},
	STOP_JOG {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((MoveToNextZoneObject)stateObject).stopJog();
		}
	},
	DONE {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			System.out.println("MoveToNextZoneState> Perform Done actions");
			return START;
		}
	},
}
